package com.intelligent.service;

import com.intelligent.pojo.Product;
import com.baomidou.mybatisplus.extension.service.IService;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;

import java.util.List;

/**
* @author lenovo
* @description 针对表【product(产品信息表)】的数据库操作Service
* @createDate 2025-08-27 15:58:27
*/
public interface ProductService extends IService<Product> {

	/**
	 * 分页查询产品（关联单位和仓库名称），支持条件筛选。
	 * 空参数不参与筛选。
	 *
	 * @param page 分页对象
	 * @param productCode 产品编码（模糊）
	 * @param productName 产品名称（模糊）
	 * @param sourceType 来源类型（模糊）
	 * @param status 状态（精确）0启用 1停用
	 * @return 分页结果
	 */
	IPage<Product> pageProduct(Page<Product> page,
	                          String productCode,
	                          String productName,
	                          String sourceType,
	                          Integer status);

	/**
	 * 导出商品信息列表为Excel（关联单位和仓库名称）
	 *
	 * @param productCode 产品编码（模糊）
	 * @param productName 产品名称（模糊）
	 * @param sourceType 来源类型（模糊）
	 * @param status 状态（精确）0启用 1停用
	 * @return 商品信息列表
	 */
	List<Product> exportProductInfoToExcel(String productCode,
							   String productName,
							   String sourceType,
							   Integer status);

	/**
	 * 新增产品，若未提供产品编码则自动生成。
	 * @param product 产品实体
	 * @return 是否新增成功
	 */
	boolean createProduct(Product product);

	/**
	 * 修改产品
	 * @param product 产品实体
	 * @return 是否修改成功
	 */
	boolean updateProduct(Product product);

	/**
	 * 根据主键查询产品详情（联查单位与仓库名称）。
	 * @param productId 产品id
	 * @return 产品详情
	 */
	Product getByIdWithJoin(Long productId);

	/**
	 * 根据主键删除产品
	 * @param productId 产品id
	 * @return 是否删除成功
	 */
	boolean deleteProduct(Long productId);

}
